package com.aphrodite.io;

import java.io.IOException;
import java.io.Reader;

/**
 * Read text from a character-input stream.
 */
public class BufferedReader extends Reader {
	Reader in;

	/** Costructs a new BufferedReader. */
	public BufferedReader(Reader in) {
		super(in);
		this.in = in;
	}

	/** Close the stream. */
	public void close() throws IOException {
		in.close();
	}

	/** Read characters into a portion of an array. */
	public int read(char[] cbuf, int off, int len) throws IOException {
		return in.read(cbuf, off, len);
	}

	/**
	 * Read a line of text. A line is considered to be terminated by any one of
	 * a line feed ('\n'), a carriage return ('\r'), or a carriage return
	 * followed immediately by a linefeed.
	 * 
	 * @return A String containing the contents of the line, not including any
	 *         line-termination characters, or null if the end of the stream has
	 *         been reached.
	 * @throw IOException If an I/O error occurs
	 */
	public String readLine() throws IOException {
		String str = "";
		int c = in.read();
		while (c >= 0 && c != '\r' && c != '\n') {
			str += (char) c;
		}
		if (str.length() == 0 && c < 0)
			return null;
		else
			return str;
	}
}